package com.bblocks.common.anti_reptile.config.bean;

import com.bblocks.common.anti_reptile.constant.RuleTypeEnum;
import lombok.Data;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * <p>Project: bb-anti-reptile - IpRule</p>
 * <p>描述：死ip规则
 * 主要：某1接口多少秒内多少次来控制
 * </p>
 *
 * @Author Zhao [125043150@qq.com]
 * @Date 2024/3/22 14:16
 * @Version 1.0
 * @since 8
 */
@Data
public class IpRule extends RuleComm {

    public IpRule(){
        this(RuleTypeEnum.IP,false);
    }

    public IpRule (RuleTypeEnum ruleTypeEnum, boolean mixRule){
        super(ruleTypeEnum,mixRule);
    }


    /**
     * IP白名单，支持后缀'*'通配，以','分隔
     */
    private List<String> ignoreIps;

    /**
     * 黑名单,支持后缀'*'通配，以','分隔（直接返回黑名单限流且不能解除）
     */
    private List<String> blackIps;


    /**
     * 是否白名单IP
     * @param ip
     * @return
     */
    public boolean isIgnoreIp(String ip) {
        if (ignoreIps == null) {
            return false;
        }
        for (String ignoreIp : ignoreIps) {
            if (ignoreIp.endsWith("*")) {
                ignoreIp = ignoreIp.substring(0, ignoreIp.length() - 1);
            }
            if (ip.startsWith(ignoreIp)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 是否黑名单IP
     * @param ip
     * @return
     */
    public boolean isBlackIp(String ip) {
        if (blackIps == null) {
            return false;
        }
        for (String blackIp : blackIps) {
            if (blackIp.endsWith("*")) {
                blackIp = blackIp.substring(0, blackIp.length() - 1);
            }
            if (ip.startsWith(blackIp)) {
                return true;
            }
        }
        return false;
    }


}
